import {
  observe
} from "../observer/index";

//根据旧的对象创建新的对象
var originArrMethods = Array.prototype,
  arrMethods = Object.create(originArrMethods);

var ARR_METHODS = [
  'push',
  'pop',
  'shift',
  'unshift',
  'splice',
  'sort',
  'reverse'
];

//遍历每一项数组操作方法
ARR_METHODS.map(function (m) {
  // console.log(m);
  //push/pop/shift/unshift..

  //重写新的数组处理方法
  //args 处理方法的参数(不固定) 如arr.push(123)
  arrMethods[m] = function () {
    //将类数组转为数组
    var args = Array.prototype.slice.call(arguments),

      //旧功能：新的按照旧的数组操作方法执行的方式
      //this -> 调用者
      rt = originArrMethods[m].apply(this, args);

    // 新逻辑功能 增加push / unshift / splice方法
    var newArr;

    switch (m) {
      case 'push':
        break;
      case 'unshift':
        newArr = args;
        break;
      case 'splice':
        //splice(位置0,位置1,新增内容)
        newArr = args.slice(2);
        break;
      default:
        break;
    }

    newArr && observeArr(newArr);
    return rt;

  }

});

function observeArr(arr) {
  // console.log(arr);
  /**
   * [
   *   {id: 1, name: '小张'},
   *   {id: 2, name: '小王'}
   * ]
   */
  for (var i = 0; i < arr.length; i++) {
    observe(arr[i]);
  }
}

export {
  arrMethods,
  observeArr
}